/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicity call 'app.receivedEvent(...);'
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        //var parentElement = document.getElementById(id);
        //var listeningElement = parentElement.querySelector('.listening');
        //var receivedElement = parentElement.querySelector('.received');

        //listeningElement.setAttribute('style', 'display:none;');
        //receivedElement.setAttribute('style', 'display:block;');
    	
    	
		var pushNotification = window.plugins.pushNotification;
		alert('pushNotification='+pushNotification);
		pushNotification.register(app.successHandler, app.errorHandler,{"senderID":"205254829702","ecb":"app.onGCMNotification"});
		
        console.log('Received Event: ' + id);
    },
    
    // result contains any message sent from the plugin call
	successHandler: function(result) {
    alert('Callback Success! Result = '+result)
	},
	
	errorHandler:function(error) {
    alert('Error= '+error);
	},
	
	onGCMNotification: function(e) {
		alert('notification : '+e.event);
        switch( e.event )
        {
            case 'registered':
                if ( e.regid.length > 0 )
                {
                    console.log("Regid " + e.regid);
                    alert('registration id = '+e.regid);
                }
            break;
 
            case 'message':
              // this is the actual push notification. its format depends on the data model from the push server
              alert('message = '+e.message+' msgcnt = '+e.msgcnt);
              //TODO:
              //1. call db method in storage.js to insert the new message into dbtable
              //2. show the notification. (when the index  page loads, all teh data in the db should be queried
              // and shown in a list view)
              //3. when user clicks a notification, it should take the user to the detailview.
              //4. the url of the detail page should be something like detail.html?msgId=<messageId>
              //UI:
              //1. list.html : the init methjod in this UI will query the db and display the rows in a list view
              //2. detail.html: will take a parameter msgId in the url. It will use the msgId to query a specific
              //message from the db in the init method and show the details in a single view.
              var db = window.openDatabase("PUSHTABLE", "1.0", "Test DB", 1000000);
              db.transaction(populateDB, errorCB, successCB);
              break;
 
            case 'error':
              alert('GCM error = '+e.msg);
            break;
 
            default:
              alert('An unknown GCM event has occurred');
              break;
        }
    }
};